/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    /*
    将链表的前K个结点入栈，如果k大于链表长度则直接返回链表不翻转
    依次出栈，相当于翻转
    判断剩下的链表结点够不够K个，少于K不翻转，大于K个重复以上步骤
    */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        if(head==nullptr)
            return nullptr;
        stack<int>s;
        auto p=head;
        auto q=p;
        int len=0;
        while(p){len++;p=p->next;}
        //1->2->3
        p=head;
        int count=k;
        for(int i=0;i<len/k;i++)
        {
            while(count--)
            {
                s.push(p->val);
                p=p->next;
            }
            while(!s.empty())
            {
                q->val=s.top();s.pop();
                q=q->next;
            }
            count=k;
        }
        return head;
    }
};